/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package cliente.rmi_aux;

import Excepcoes.AlreadyFollowing;
import Excepcoes.DoubleRegistracion;
import Excepcoes.InvalidMail;
import Excepcoes.InvalidName;
import Excepcoes.InvalidSearch;
import Excepcoes.IsLogged;
import Excepcoes.NoDetails;
import Excepcoes.NoFollers;
import Excepcoes.NoFollowing;
import Excepcoes.NoTweets;
import Excepcoes.WrongLog;
import cliente.GereOperacoes;
import cliente.gui.Erro;
import common.Menssagem;
import java.rmi.RemoteException;

/**
 *
 * @author ziza
 */
public class RMInterface {
    
    GereOperacoes gestor = null;
    Menssagem resposta;
    int tenta = 0;
    long tempoInicial;

    public RMInterface(GereOperacoes gestor) {
        this.gestor = gestor;
        resposta = null;
    }

    public void trocaDados(Menssagem sms) {
        try {
            resposta = gestor.getConexao().getHandling().handleData(sms);
            gestor.trataMensagem(resposta);
            System.out.println("Dados reencaminhados com sucesso!!!");
        } catch (NoFollers ex) {
            System.out.println("[Erro]Followers:"+ex.getMessage());
            new Erro("[Dados]", ex.getMessage());
        } catch (NoFollowing ex) {
            System.out.println("[Erro]Following:"+ex.getMessage());
            new Erro("[Dados]", ex.getMessage());
        } catch (InvalidSearch ex) {
            System.out.println("[Erro]Pesquisa:"+ex.getMessage());
            new Erro("[Dados]", ex.getMessage());
        } catch (AlreadyFollowing ex) {
            System.out.println("[Erro]Ja a seguir:"+ex.getMessage());
            new Erro("[Dados]", ex.getMessage());
        } catch (NoTweets ex) {
            System.out.println("[Erro]Tweets:"+ex.getMessage());
            new Erro("[Dados]", ex.getMessage());
        } catch (NoDetails ex) {
            System.out.println("[Erro]Detalhes:"+ex.getMessage());
            new Erro("[Dados]", ex.getMessage());
        } catch (WrongLog ex) {
            System.out.println("[Erro]Loggin:"+ex.getMessage());
            new Erro("[Dados]", ex.getMessage());
        } catch (InvalidName ex) {
            System.out.println("[Erro]Registo:"+ex.getMessage());
            new Erro("[Dados]", ex.getMessage());
        } catch (InvalidMail ex) {
            System.out.println("[Erro]Registo:"+ex.getMessage());
            new Erro("[Dados]", ex.getMessage());
        } catch (DoubleRegistracion ex) {
            System.out.println("[Erro]Registo:"+ex.getMessage());
            new Erro("[Dados]", ex.getMessage());
        } catch (IsLogged ex) {
            System.out.println("[Erro]Registo:"+ex.getMessage());
            new Erro("[Dados]", ex.getMessage());
        }catch (RemoteException ex) {
            if(sms.getMenssagem().contains("Tweet:"))
                gestor.getEnvia().setArrayList(sms);
//            new RecuperaLigacao(gestor);
            if(tenta==0){
                tempoInicial=System.currentTimeMillis();
                tenta++;
                gestor.getConexao().setEstado("Falha");
                System.out.println("[ERRO]Remote:"+ex.getMessage());
                new Erro("[Ligacao]", "Erro no envio dos dados!");
            }
            

            //Procura ligar-se durante 2 minutos While
            if(gestor.getConexao().conexao_RMI()!=0){
                 if(gestor.verificaTempo(tempoInicial)){
                     gestor.getConexao().setEstado("Falha");
                    gestor.fazLogout();
                    return;
                }
            }
        }
    }
}
